/**
 * 
 */
package com.pe.pgn.clubpgn.dao.impl;

import java.util.Calendar;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import com.pe.pgn.clubpgn.dao.ProductoDao;
import com.pe.pgn.clubpgn.dao.hibernate.GenericDaoHibernate;
import com.pe.pgn.clubpgn.domain.ClpbProducto;
import com.pe.pgn.clubpgn.domain.ClpdUnidadMedida;

/**
 * @author Edwin Farfan
 */
@Repository()
public class ProductoDaoImpl extends GenericDaoHibernate<ClpbProducto, Long> implements ProductoDao {

	public ProductoDaoImpl() {
		super(ClpbProducto.class);
	}
	
	@SuppressWarnings("unchecked")
	public List<ClpbProducto> obtenerProductos(){
		Criteria criteria = DetachedCriteria.forClass(ClpbProducto.class)
		.getExecutableCriteria(getSessionFactory().getCurrentSession());
		criteria.add(Restrictions.eq("stProducto", Boolean.TRUE));
		return (List<ClpbProducto>) criteria.list();
	}

	public ClpbProducto obtenerProducto(Long id){
		return (ClpbProducto)get(id);
	}
	
	public void guardarProducto(ClpbProducto producto){
		
	if(producto.getId() == null){
			producto.setCoUsuarioCreador(getUsuarioLogueado().getUsername());
			producto.setDaFechaCreacion(Calendar.getInstance());
		}
	else{
			producto.setCoUsuarioModificador(getUsuarioLogueado().getUsername());
			producto.setDaFechaModificacion(Calendar.getInstance());
		}
		producto.setStProducto(Boolean.TRUE);
		producto.setCoUnidadMedida(getHibernateTemplate().get(ClpdUnidadMedida.class, new Long (producto.getUnidadMedida())));
		getHibernateTemplate().saveOrUpdate(producto);
		getHibernateTemplate().flush();
	}
	
	public void eliminarProducto(Long id){
//		remove(id);
		//Eliminacion Logica
		ClpbProducto producto=getHibernateTemplate().get(ClpbProducto.class, id);
		producto.setStProducto(Boolean.FALSE);
		
		getHibernateTemplate().update(producto);
	    getHibernateTemplate().flush();
	}
	
	@SuppressWarnings("unchecked")
	public List<ClpdUnidadMedida> listadoUnidadMedida(){

		Criteria criteria = DetachedCriteria.forClass(ClpdUnidadMedida.class)
		.getExecutableCriteria(getSessionFactory().getCurrentSession());
		criteria.add(Restrictions.eq("stUnidadMedida", Boolean.TRUE));
		return (List<ClpdUnidadMedida>) criteria.list();
	}
}
